import vnode from './vnode'

/**
 * 
 * @param {*} sel 
 * @param {*} data 
 * @param {*} c 
 * @returns 
 */
export default function(sel,data,c){

    if(arguments.length!==3){
        throw new Error('不能小于或大于三个参数')
    }
    
    if(typeof c === 'string' || typeof c === 'number'){ // 判断c是否是字符串或者是数字
        return vnode(sel,data,undefined,c,undefined)
    }else if(Array.isArray(c)){ // 判断c是否是数组
        const children = []
        for(let i = 0; i < c.length; i++){
            if( typeof c[i] !== 'object' || !(c[i].hasOwnProperty('sel'))){ // c如果是一个数组，数组里面的数据必定每个h函数执行的返回的结果，即是一个对象
                throw new Error('对象中不能含有h函数以外的值')
            }else{
                children.push(c[i])
            }
        }
        return vnode(sel,data,children,undefined,undefined)
    }else if(typeof c === 'object' && c.hasOwnProperty('sel')){
        const children = [c]
        return vnode(sel,data,children,undefined,undefined)
    }else{
        throw new Error('参数不合法')
    }
}